package com.sayice.gomoku.service;

import com.sayice.gomoku.pojo.Board;
import com.sayice.gomoku.pojo.BoardInfo;

import java.math.BigDecimal;
import java.util.List;

/**
 * 棋盘业务
 */
public interface BoardService {
    /**
     * 设置棋盘名
     *
     * @param adminId 管理员编号
     * @param boardId 棋盘编号
     * @param name    棋盘名
     * @return 返回 sql 语句影响的行数
     */
    int setName(int adminId, int boardId, String name);
    
    /**
     * 设置价格
     *
     * @param adminId 管理员编号
     * @param boardId 棋盘编号
     * @param price   价格
     * @return 返回 sql 语句影响的行数
     */
    int setPrice(int adminId, int boardId, BigDecimal price);
    
    /**
     * 设置最后修改者
     *
     * @param boardId 棋盘编号
     * @param modifierId 最后修改者编号
     * @return 返回 sql 语句影响的行数
     */
    int setModifier(int boardId, int modifierId);
    
    /**
     * 获取棋盘
     *
     * @param id 棋盘编号
     * @return 返回 Board 对象，返回 null 表示该棋盘不存在
     */
    Board getBoard(int id);
    
    /**
     * 获取所有棋盘
     *
     * @return 返回 Board 集合
     */
    List<Board> getBoards();
    
    /**
     * 获取所有棋盘信息
     *
     * @return 返回 BoardInfo 集合
     */
    List<BoardInfo> getBoardInfos();
    
    /**
     * 获取用户购买的棋盘
     *
     * @param userId 用户编号
     * @return 返回 Board 集合
     */
    List<Board> getUserBoards(int userId);
    
    /**
     * 棋盘是否被被指定用户购买
     *
     * @param boardId 棋盘编号
     * @param userId  用户编号
     * @return 该棋盘被该用户购买则返回 true，否则返回 false
     */
    boolean bought(int boardId, int userId);
    
    /**
     * 购买棋盘
     *
     * @param userId  用户编号
     * @param boardId 棋盘编号
     * @return 返回 sql 语句影响的行数 (购买记录表)
     */
    int buy(int userId, int boardId);
    
    /**
     * 棋盘名是否已存在
     *
     * @param name 棋盘名
     * @return 已存在则返回 true，否则返回 false
     */
    boolean existsName(String name);
    
    /**
     * 上传棋盘
     *
     * @param board 棋盘
     * @return 返回 sql 语句影响的行数 (棋盘表)
     */
    int upload(Board board);
}
